//package com.greenline.push.service.core.tmpl;
//
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.List;
//import java.util.Map.Entry;
//import java.util.concurrent.ConcurrentHashMap;
//
//import org.apache.log4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.Assert;
//
//import com.greenline.push.core.pushcenter.AppDomainTemplateManager;
//import com.greenline.push.core.pushcenter.AppTemplateManager;
//import com.greenline.push.core.pushcenter.DomainManager;
//import com.greenline.push.dal.pushcenter.dataobject.AppDomainTemplateDO;
//import com.greenline.push.dal.pushcenter.dataobject.AppTemplateDO;
//import com.greenline.push.dal.pushcenter.dataobject.DomainDO;
//import com.greenline.push.dal.query.AppDomainTemplateQuery;
//import com.greenline.push.service.core.utils.Constants;
//
///**
// * 
// * @Type DomainTemplateCache
// * @Desc 加载域和对应的发送渠道的关联表
// * @author shuai.zuo
// * @date 2014年11月12日
// * @Version V1.0
// */
//public class DomainTemplateCache {
//    @Autowired
//    private DomainManager domainManager;
//    @Autowired
//    private AppDomainTemplateManager appDomainTemplateManager;
//    @Autowired
//    private AppTemplateManager appTemplateManager;
//    @Autowired
//    private TemplateCache templateCache;
//    private ConcurrentHashMap<Long, List<AppTemplateInfo>> domainTemplateMap = new ConcurrentHashMap<Long, List<AppTemplateInfo>>();
//    private Logger log = Constants.LOG_CACHE;
//
//    /**
//     * 输出的从高到底按照优先级排序的map<id-->list(已排序)>
//     */
//    public void initial() {
//        log.info("init domain-template  cache start======");
//        List<DomainDO> domainList = domainManager.listAll();
//        for (DomainDO tmp : domainList) {
//            Long domain_id = tmp.getId();
//            // get domain_app_tempalte
//            // default get 100 templates
//            AppDomainTemplateQuery query = new AppDomainTemplateQuery();
//            query.setPageSize(100);
//            query.setDomainId(domain_id);
//
//            AppDomainTemplateQuery queryDomainResult = appDomainTemplateManager.listByQuery(query);
//            if (queryDomainResult == null)
//                continue;
//            List<AppDomainTemplateDO> templateResult = queryDomainResult.getDataList();
//            for (AppDomainTemplateDO t_tmp : templateResult) {
//                Long apptemplate_id = t_tmp.getAppTemplateId();
//                // make app_template info
//                AppTemplateInfo info = wrapApptemplateInfo(t_tmp, apptemplate_id);
//                // test info
//                if (info == null)
//                    continue;
//                // test if map contain the domain
//                if (domainTemplateMap.containsKey(domain_id)) {
//                    List<AppTemplateInfo> domainInfoList = domainTemplateMap.get(domain_id);
//                    if (domainInfoList == null)
//                        domainInfoList = new ArrayList<AppTemplateInfo>();
//                    domainInfoList.add(info);
//                } else {
//                    List<AppTemplateInfo> domainInfoList = new ArrayList<AppTemplateInfo>();
//                    domainInfoList.add(info);
//                    domainTemplateMap.put(domain_id, domainInfoList);
//                }
//            }
//        }
//
//        // sort list
//        for (Entry<Long, List<AppTemplateInfo>> entry : domainTemplateMap.entrySet()) {
//            Collections.sort(entry.getValue());
//        }
//
//        log.info("init domain-template  cache end======");
//    }
//
//    public List<AppTemplateInfo> getAppTemplates(Long domainId) {
//        if (null == domainId)
//            return null;
//        return domainTemplateMap.get(domainId);
//    }
//
//    public Boolean containsDomain(Long domainId) {
//        return domainTemplateMap.contains(domainId);
//    }
//
//    /**
//     * 输出的从高到底按照优先级排序的map<id-->list(已排序)>
//     */
//    public boolean reload() {
//        log.debug("domain template cache reload start-========");
//        List<DomainDO> domainList = domainManager.listAll();
//        Assert.notNull(domainList, "重载失败，domainManager返回NULL");
//        domainTemplateMap.clear();
//        for (DomainDO tmp : domainList) {
//            Long domain_id = tmp.getId();
//            // get domain_app_tempalte
//            // default get 100 templates
//            AppDomainTemplateQuery query = new AppDomainTemplateQuery();
//            query.setPageSize(100);
//            query.setDomainId(domain_id);
//
//            AppDomainTemplateQuery queryDomainResult = appDomainTemplateManager.listByQuery(query);
//            if (queryDomainResult == null)
//                continue;
//            List<AppDomainTemplateDO> templateResult = queryDomainResult.getDataList();
//            for (AppDomainTemplateDO t_tmp : templateResult) {
//                Long apptemplate_id = t_tmp.getAppTemplateId();
//                // make app_template info
//                AppTemplateInfo info = wrapApptemplateInfo(t_tmp, apptemplate_id);
//                // test info
//                if (info == null)
//                    continue;
//                // test if map contain the domain
//                if (domainTemplateMap.containsKey(domain_id)) {
//                    List<AppTemplateInfo> domainInfoList = domainTemplateMap.get(domain_id);
//                    if (domainInfoList == null)
//                        domainInfoList = new ArrayList<AppTemplateInfo>();
//                    domainInfoList.add(info);
//                } else {
//                    List<AppTemplateInfo> domainInfoList = new ArrayList<AppTemplateInfo>();
//                    domainInfoList.add(info);
//                    domainTemplateMap.put(domain_id, domainInfoList);
//                }
//            }
//        }
//        // sort list
//        for (Entry<Long, List<AppTemplateInfo>> entry : domainTemplateMap.entrySet()) {
//            Collections.sort(entry.getValue());
//        }
//        // refresh template.because apptemplate is relateive with template cache
//        templateCache.reload();
//
//        log.debug("domain template cache reload end-========");
//        return true;
//    }
//
//    private AppTemplateInfo wrapApptemplateInfo(AppDomainTemplateDO t_tmp, Long apptemplate_id) {
//        if (apptemplate_id == null || apptemplate_id == 0) {
//            log.error(String.format("domain-template-cache has null param{apptemplate_id} %s.return null object", apptemplate_id));
//            return null;
//        }
//        AppTemplateDO appTemplate = appTemplateManager.getAppTemplateById(apptemplate_id);
//        if (null == appTemplate) {
//            log.error(String.format("domain-apptemplate-cache has no template with templateId:%s.returns null object", apptemplate_id));
//            return null;
//        }
//        if (appTemplate == null || appTemplate.getTemplateId() == 0 || appTemplate.getAppChannelId() == 0) {
//            //
//            log.error(String.format("domain-template-cache[pk:%s] has null value :tempateId:%s,appchennelId:%s.returns null",
//                    appTemplate.getId(), appTemplate.getTemplateId(), appTemplate.getAppChannelId()));
//            return null;
//        }
//        AppTemplateInfo info = new AppTemplateInfo();
//        info.setPriority(t_tmp.getPriority());
//        info.setAppId(appTemplate.getAppId());
//        info.setExtTemplId(appTemplate.getExtTemplId());
//        info.setExtTemplType(appTemplate.getExtTemplType());
//        info.setParamConvert(appTemplate.getParamConvert());
//        info.setTemplateId(appTemplate.getTemplateId());
//        info.setAppTemplateId(apptemplate_id);
//        info.setAppChannelId(appTemplate.getAppChannelId());
//        return info;
//    }
//
//}
